A cidade de Monte Alegre, localizada no estado do Pará, foi uma das regiões afetadas pela pandemia de COVID-19. Como forma de contribuir com o combate ao vírus e conscientizar a população local sobre a importância das medidas preventivas, desenvolvi um projeto de visualização dos casos de COVID-19 na cidade.
Coletando os dados a partir dos relatórios diários da prefeitura, priorizei o mapeamento dos casos na zona rural, onde muitas vezes o acesso à informação e aos serviços de saúde é mais limitado. Além disso, para a obtenção dos dados de geolocalização, utilizei o Google Maps e fiz a coleta manualmente.
Por meio da apresentação visual dos dados, busquei fornecer informações relevantes para identificar regiões que estavam em situações críticas. Ademais, o mapa consegue mostrar como estava a situação nas áreas mais remotas do município.
Antes de iniciar a instalação dos pacotes necesários projetos, faz-se necessário instalar o JAVA na máquina.
Fique atento e escolha a arquitetura correta do seu sistema (provavelmente será 64 bits).
# Instalando Knitr se não tiver disponível
if (!("knitr" %in% installed.packages()[, "Package"])){
install.packages(("knitr"))
}
# Comando para evitar a aparição de warnings no Markdown
knitr::opts_chunk$set(warning = FALSE, message = FALSE)
# lista de pacotes necessários para o projeto
packages <- c("ggplot2", "ggpubr", "lubridate", "dplyr", "plotly", "ggrepel", "OpenStreetMap", "ggspatial","kableExtra", "knitr", "rJava")
# Lista de pacotes que tinão estão na máquina
filter_not_installed <- !(packages %in% installed.packages()[, "Package"])
new.packages <- packages[filter_not_installed]
# Instalando pacotes que não estão na máquina (Comando pode demorar alguns minutos)
if (length(new.packages)) install.packages(new.packages, dependencies=TRUE)
# Carregando pacotes
library(ggplot2)
library(ggpubr)
library(lubridate)
library(dplyr)
library(plotly)
library(ggrepel)
library(ggspatial)
library(OpenStreetMap)
library(kableExtra)
#ALTERA AQUI A PASTA COM A BASE DE DADOS
root_path <- "D:/OneDrive/Documentos/Estudos/Covid-Monte-Alegre-PA/Dados/"
# Base com dados de covid de cada comunidade Rural da cidade Monte Alegre PA
dadosRural <- read.csv2(
paste(root_path, "CasosRural.csv", sep = ""),
encoding = "UTF-8")
names(dadosRural)[1] <- "Comunidade"
# convert to date type
dadosRural$Data = as.Date(dadosRural$Data, format = "%d/%m/%Y")
# Obtendo o último dia que teve atualização dos dados
ultimo_dia <- max(dadosRural$Data)
# Base com a geolocalização de cada comunidade Rural do Município
coordenandasRural <- read.csv2(
file = paste(root_path, "coordrural.csv", sep = ""),
header = TRUE,
encoding = "UTF-8")
# ALterando o nome da colunas
names(coordenandasRural)[1] <- "Comunidade"
names(coordenandasRural)[2] <- "Latitude"
names(coordenandasRural)[3] <- "Longitude"
# Base com os dados de Covid de todo o município de Monte Alegre
covidmta <- read.csv2(
paste(root_path, "casos mta.csv", sep = ""),
encoding = "UTF-8")
# Alerando nome da coluna
names(covidmta)[1] <- "Data"
# Convertando para o tipo data
covidmta$Data <- as.Date(covidmta$Data, format = "%d/%m/%Y")
# Obtendo o total de obitos e casos até a última data de registro
CasosDoDia <- covidmta$Casos[covidmta$Data == ultimo_dia]
ObitosDoDia <- covidmta$Obitos[covidmta$Data == ultimo_dia]
Os dados relacionados aos casos de Covid-19 foram coletados no Portal da Prefeitura de Monte Alegre-PA.
No portal, não há dados estruturados dos casos, logo foi necessário popular manualmente uma planilha no Excel com os casos de Covid.
Sobre as coordenadas geográficos das comunidades rurais, não existem dados estruturados na internet sobre esse tema. Diante diso, usando a interface do Google Maps, foi populada uma planilha no Excel com esses dados.
# Converte os dados de inteiros para numéricos. Esse tratamento permite a compatibildade com o geom_point()
dadosRural$Casos <- as.numeric(dadosRural$Casos)
dadosRural$Obitos <- as.numeric(dadosRural$Obitos)
dadosRural$Casos.M <- as.numeric(dadosRural$Casos.M)
dadosRural$Casos.F <- as.numeric(dadosRural$Casos.F)
dadosRural$Obitos.M <- as.numeric(dadosRural$Obitos.M)
dadosRural$Obitos.F <- as.numeric(dadosRural$Obitos.F)
# Conversão da Latitude e Longitude para float
coordenandasRural$Longitude <- as.numeric(gsub(",", ".", coordenandasRural$Longitude))
coordenandasRural$Latitude <- as.numeric(gsub(",", ".", coordenandasRural$Latitude))
# Une os dados de covid com a localização das comunidades
ruralmap <- left_join(dadosRural, coordenandasRural, by = "Comunidade")
# Removendo os NaN da união das bases
ruralmap = na.omit(ruralmap)
cat("Dados após o pré-processamento")
Dados após o pré-processamento
ruralmap %>%
head(5) %>%
kbl() %>%
kable_styling(bootstrap_options = "striped", font_size = 7)
| Comunidade | Casos.M | Casos.F | Obitos.M | Obitos.F | Casos | Obitos | Data | Latitude | Longitude | |
|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Airi | 10 | 14 | 0 | 0 | 24 | 0 | 2020-07-01 | -1.976030 | -54.10550 |
| 4 | Agapito | 0 | 1 | 0 | 0 | 1 | 0 | 2020-07-01 | -1.732961 | -54.00634 |
| 5 | Bacabalzinho | 0 | 1 | 0 | 0 | 1 | 0 | 2020-07-01 | -2.008514 | -54.35383 |
| 8 | Canp | 5 | 3 | 0 | 0 | 8 | 0 | 2020-07-01 | -1.944857 | -54.21509 |
| 9 | Cauçú A | 1 | 0 | 0 | 0 | 1 | 0 | 2020-07-01 | -1.939322 | -54.31560 |
# Filtrando os dados apenas do ultimo dia de registro da base
dados_ultimo_dia <- dadosRural %>% filter(Data == ultimo_dia)
# Criando grafico de barras
barras <- dados_ultimo_dia %>%
# Adicionando o grafico de barras com casos por comunidade
ggplot(
color = "black",
aes(
y = reorder(Comunidade, Casos), # Ordenando barras de forma descendent
x = Casos,
fill = Casos # Alterando a cor da barra de acordo com o numero de casos
),
height=1000
) +
geom_bar(stat = "identity") +
# Definindo escala de cores com range de 0 a 200
scale_fill_gradientn(
colors = c("yellow", "red", "black", "black"),
limits = c(0, 200)
) +
# Removendo rotulos dos eixos
ylab(NULL) +
xlab(NULL) +
# Adicionando titulo
ggtitle("Número de Casos - Zona Rural") +
# Adicionando o valor numerico no topo de cada barra
geom_text(aes(label = Casos), nudge_x = 1, size = 3.5) +
# Removendo textos desnecessários para o gráfico
theme(
axis.title.x = element_blank(),
axis.ticks.x = element_blank(),
axis.text.x = element_blank(),
legend.key = element_blank()
)
barras
Neste gráfico de barras estão os caso de Covid-19 separado por comunidade Rural de acordo com a última atualização da nossa base de dados(23-07-2020)
# Obtem a quantidade de comunidade que temos na base
num_comunidades <- length(dados_ultimo_dia$Comunidade)
# Filtra apenas os dados do último dia de registros
dados_ultimo_dia <- ruralmap %>%
filter(Data == ultimo_dia)
# Baixando o mapa da região rural de monte alegre
rural= openmap(
c(-1.232,-53.9072),
c(-2.307,-54.5609),
type = "osm"
)
# Converte o mapa para formato compatível com ggplot2
map.latlon <- openproj(rural, projection = "+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs")
plot <- autoplot.OpenStreetMap(map.latlon) + # Adiciona o mapa como uma camada do mapa
# Adicionando os pontos onde estão as comunidade
geom_point(
data = dados_ultimo_dia, inherit.aes = FALSE,
aes(size = Casos, color = Casos, # O tamanho e a cor dos pontos mudam de acordo com o número de casos
y = Latitude, x = Longitude), # Coordenada da comunidade no mapa
show.legend = FALSE
) +
# Ajustando as dimensões do gráfico
scale_size(limits = c(0, 200), range = c(0, 10)) +
# Definindo a escala de cores dos pontos
scale_color_gradientn(
colors = c("yellow", "red", "black", "black"), # cores da escala
limits = c(0, 200) # Range que a escala deve se basear
) +
# Adicionando uma label com o nome da comunidade em cada ponto
geom_label_repel(
data = dados_ultimo_dia,
aes(label = Comunidade, x = Longitude, y = Latitude),
force = 20, # Definindo o quanto as labels devem evitar o overlapping
point.padding = 0.2,
label.padding = 0.1,
size = 2.5, # Tamanho da label
box.padding = unit(0.5, "lines")
) +
# Adicionando o titulo do grafico com base no ultimo dia de registro
ggtitle(paste("Panorama de", ultimo_dia, "- Monte Alegre-PA")) +
# Adicionando dados com o cenário geral da zona rural
geom_label(
aes(y = -1.232, x = -54.9072, label = paste("Casos:", CasosDoDia, "Óbitos:", ObitosDoDia, sep="\n")),
nudge_x = 0.41, nudge_y = -0.085) +
# Ajustando para não mostrar informações não desejado no plot
theme(
axis.title.x = element_blank(), # Removendo titulo do eixo x
axis.title.y = element_blank(), # Removendo titulo do eixo y
axis.ticks.x = element_blank(), # Removendo numeros do eixo x
axis.ticks.y = element_blank(), # Removendo numeros do eixo y
axis.text.y = element_blank(), # Removendo texto do eixo y
axis.text.x = element_blank(), # Removendo texto do eixo x
legend.position = "none", # Removendo legenda
legend.box = "none" # Removendo caixa da legenda
)
plot(plot)
Nessa visão, é possível ver um recorte do município de Monte Alegre-PA e suas principais comunidades.
Em cada local, está um ponto que tem o tamanho de acordo com o nível de contaminação do local. Além disso, a cor dos pontos varia de amarelo até vermelho, indicando a quantidade de contaminados.
# Unindo os dois gráficos feitos anteriormente
subplots <- ggarrange(plot,
barras,
common.legend = TRUE,
legend = "left",
ncol = 2
)
plot(subplots)
Neste plot, é possível obter um panorama geral do município. O gráfico a esquerda enfatiza a localização geográfica e o nível de contaminação. Enquanto que, a visão a direita foca na percepção quantitativa dos casos.
ggsave(paste("Panorama-Rural", ultimo_dia, ".png"), subplots,
dpi = 600,
path = root_path,
width = 8.8, height = num_comunidades * 0.121
)
PREFEITURA DE MONTE ALEGRE. Prefeitura Municipal de Monte Alegre, ano. Disponível em:http://www.montealegre.pa.gov.br/. Acesso em: 13, 04, 2023
TORTOSA-ANDREAU, Abel, Plot over OpenStreetMap with ggplot2. Linkedin, 14, 06, 2017. Disponível em: Plot over OpenStreetMap with ggplot2. Acesso em: 13/04/2023.